// noinspection JSUnresolvedReference
/**
* Field Google Map
*/
/* global jQuery, document, redux_change, redux, google */
(function ( $ ) {
'use strict';
redux.field_objects = redux.field_objects || {};
redux.field_objects.google_maps = redux.field_objects.google_maps || {};
/* LIBRARY INIT */
redux.field_objects.google_maps.init = function ( selector ) {
if ( ! selector ) {
selector = $( document ).find( '.redux-group-tab:visible' ).find( '.redux-container-google_maps:visible' );
}
$( selector ).each(
function ( i ) {
let delayRender;
const el = $( this );
let parent = el;
if ( ! el.hasClass( 'redux-field-container' ) ) {
parent = el.parents( '.redux-field-container:first' );
}
if ( parent.is( ':hidden' ) ) {
return;
}
if ( parent.hasClass( 'redux-field-init' ) ) {
parent.removeClass( 'redux-field-init' );
} else {
return;
}
// Check for delay render, which is useful for calling a map
// render after JavaScript load.
delayRender = Boolean( el.find( '.redux_framework_google_maps' ).data( 'delay-render' ) );
// API Key button.
redux.field_objects.google_maps.clickHandler( el );
// Init our maps.
redux.field_objects.google_maps.initMap( el, i, delayRender );
}
);
};
/* INIT MAP FUNCTION */
redux.field_objects.google_maps.initMap = async function ( el, idx, delayRender ) {
let delayed;
let scrollWheel;
let streetView;
let mapType;
let address;
let defLat;
let defLong;
let defaultZoom;
let mapOptions;
let geocoder;
let g_autoComplete;
let g_LatLng;
let g_map;
let noLatLng = false;
// Pull the map class.
const mapClass = el.find( '.redux_framework_google_maps' );
const containerID = mapClass.attr( 'id' );
const autocomplete = containerID + '_autocomplete';
const canvas = containerID + '_map_canvas';
const canvasId = $( '#' + canvas );
const latitude = containerID + '_latitude';
const longitude = containerID + '_longitude';
// Add map index to data attr.
// Why, say we want to use delay_render,
// and want to init the map later on.
// You'd need the index number in the
// event of multiple map instances.
// This allows one to retrieve it
// later.
$( mapClass ).attr( 'data-idx', idx );
if ( true === delayRender ) {
return;
}
// Map has been rendered, no need to process again.
if ( $( '#' + containerID ).hasClass( 'rendered' ) ) {
return;
}
// If a map is set to delay render and has been initiated
// from another scrip, add the 'render' class so rendering
// does not occur.
// It messes things up.
delayed = Boolean( mapClass.data( 'delay-render' ) );
if ( true === delayed ) {
mapClass.addClass( 'rendered' );
}
// Create the autocomplete object, restricting the search
// to geographical location types.
g_autoComplete = await google.maps.importLibrary( 'places' );
g_autoComplete = new google.maps.places.Autocomplete( document.getElementById( autocomplete ), {types: ['geocode']} );
// Data bindings.
scrollWheel = Boolean( mapClass.data( 'scroll-wheel' ) );
streetView = Boolean( mapClass.data( 'street-view' ) );
mapType = Boolean( mapClass.data( 'map-type' ) );
address = mapClass.data( 'address' );
address = decodeURIComponent( address );
address = address.trim();
// Set default Lat/lng.
defLat = canvasId.data( 'default-lat' );
defLong = canvasId.data( 'default-long' );
defaultZoom = canvasId.data( 'default-zoom' );
// Eval whether to set maps based on lat/lng or address.
if ( '' !== address ) {
if ( '' === defLat || '' === defLong ) {
noLatLng = true;
}
} else {
noLatLng = false;
}
// Can't have empty values, or the map API will complain.
// Set default for the middle of the United States.
defLat = defLat ? defLat : 39.11676722061108;
defLong = defLong ? defLong : -100.47761000000003;
if ( noLatLng ) {
// If displaying a map based on an address.
geocoder = new google.maps.Geocoder();
// Set up Geocode and pass address.
geocoder.geocode(
{'address': address},
function ( results, status ) {
let latitude;
let longitude;
// Function results.
if ( status === google.maps.GeocoderStatus.OK ) {
// A good address was passed.
g_LatLng = results[0].geometry.location;
// Set map options.
mapOptions = {
center: g_LatLng,
zoom: defaultZoom,
streetViewControl: streetView,
mapTypeControl: mapType,
scrollwheel: scrollWheel,
mapTypeControlOptions: {
style: google.maps.MapTypeControlStyle.HORIZONTAL_BAR,
position: google.maps.ControlPosition.LEFT_BOTTOM
},
mapId: 'REDUX_GOOGLE_MAPS',
};
// Create map.
g_map = new google.maps.Map( document.getElementById( canvas ), mapOptions );
// Get and set lat/long data.
latitude = el.find( '#' + containerID + '_latitude' );
latitude.val( results[0].geometry.location.lat() );
longitude = el.find( '#' + containerID + '_longitude' );
longitude.val( results[0].geometry.location.lng() );
redux.field_objects.google_maps.renderControls( el, latitude, longitude, g_autoComplete, g_map, autocomplete, mapClass, g_LatLng, containerID );
} else {
// No data found, alert the user.
alert( 'Geocode was not successful for the following reason: ' + status );
}
}
);
} else {
// If displaying map based on an lat/lng.
g_LatLng = new google.maps.LatLng( defLat, defLong );
// Set map options.
mapOptions = {
center: g_LatLng,
zoom: defaultZoom, // Start off far unless an item is selected, set by php.
streetViewControl: streetView,
mapTypeControl: mapType,
scrollwheel: scrollWheel,
mapTypeControlOptions: {
style: google.maps.MapTypeControlStyle.HORIZONTAL_BAR,
position: google.maps.ControlPosition.LEFT_BOTTOM
},
mapId: 'REDUX_GOOGLE_MAPS',
};
// Create the map.
g_map = new google.maps.Map( document.getElementById( canvas ), mapOptions );
redux.field_objects.google_maps.renderControls( el, latitude, longitude, g_autoComplete, g_map, autocomplete, mapClass, g_LatLng, containerID );
}
};
redux.field_objects.google_maps.renderControls = function ( el, latitude, longitude, g_autoComplete, g_map, autocomplete, mapClass, g_LatLng, containerID ) {
let markerTooltip;
let infoWindow;
let g_marker;
let geoAlert = mapClass.data( 'geo-alert' );
// Get HTML.
const input = document.getElementById( autocomplete );
// Set objects into the map.
g_map.controls[google.maps.ControlPosition.TOP_LEFT].push( input );
// Bind objects to the map.
g_autoComplete = new google.maps.places.Autocomplete( input );
g_autoComplete.bindTo( 'bounds', g_map );
// Get the marker tooltip data.
markerTooltip = mapClass.data( 'marker-tooltip' );
markerTooltip = decodeURIComponent( markerTooltip );
// Create infoWindow.
infoWindow = new google.maps.InfoWindow();
// Create marker.
g_marker = new google.maps.Marker(
{
position: g_LatLng,
map: g_map,
anchorPoint: new google.maps.Point( 0, - 29 ),
draggable: true,
title: markerTooltip,
animation: google.maps.Animation.DROP
}
);
geoAlert = decodeURIComponent( geoAlert );
// Place change.
google.maps.event.addListener(
g_autoComplete,
'place_changed',
function () {
let place;
let address;
let markerTooltip;
infoWindow.close();
// Get place data.
place = g_autoComplete.getPlace();
// Display alert if something went wrong.
if ( ! place.geometry ) {
window.alert( geoAlert );
return;
}
console.log( place.geometry.viewport );
// If the place has a geometry, then present it on a map.
if ( place.geometry.viewport ) {
g_map.fitBounds( place.geometry.viewport );
} else {
g_map.setCenter( place.geometry.location );
g_map.setZoom( 17 ); // Why 17? Because it looks good.
}
markerTooltip = mapClass.data( 'marker-tooltip' );
markerTooltip = decodeURIComponent( markerTooltip );
// Set the marker icon.
g_marker = new google.maps.Marker(
{
position: g_LatLng,
map: g_map,
anchorPoint: new google.maps.Point( 0, - 29 ),
title: markerTooltip,
clickable: true,
draggable: true,
animation: google.maps.Animation.DROP
}
);
// Set marker position and display.
g_marker.setPosition( place.geometry.location );
g_marker.setVisible( true );
// Form array of address components.
address = '';
if ( place.address_components ) {
address = [( place.address_components[0] && place.address_components[0].short_name || '' ),
( place.address_components[1] && place.address_components[1].short_name || '' ),
( place.address_components[2] && place.address_components[2].short_name || '' )].join( ' ' );
}
// Set the default marker info window with address data.
infoWindow.setContent( '
' + place.name + ' ' + address );
infoWindow.open( g_map, g_marker );
// Run Geolocation.
redux.field_objects.google_maps.geoLocate( g_autoComplete );
// Fill in address inputs.
redux.field_objects.google_maps.fillInAddress( el, latitude, longitude, g_autoComplete );
}
);
// Marker drag.
google.maps.event.addListener(
g_marker,
'drag',
function ( event ) {
document.getElementById( latitude ).value = event.latLng.lat();
document.getElementById( longitude ).value = event.latLng.lng();
}
);
// End marker drag.
google.maps.event.addListener(
g_marker,
'dragend',
function () {
redux_change( el.find( '.redux_framework_google_maps' ) );
}
);
// Zoom Changed.
g_map.addListener(
'zoom_changed',
function () {
el.find( '.google_m_zoom_input' ).val( g_map.getZoom() );
}
);
// Marker Info Window.
infoWindow = new google.maps.InfoWindow();
google.maps.event.addListener(
g_marker,
'click',
function () {
const marker_info = containerID + '_marker_info';
const infoValue = document.getElementById( marker_info ).value;
if ( '' !== infoValue ) {
infoWindow.setContent( infoValue );
infoWindow.open( g_map, g_marker );
}
}
);
};
/* FILL IN ADDRESS FUNCTION */
redux.field_objects.google_maps.fillInAddress = function ( el, latitude, longitude, g_autoComplete ) {
// Set variables.
const containerID = el.find( '.redux_framework_google_maps' ).attr( 'id' );
// What if someone only wants city, or state, ect...
// gotta do it this way to check for the address!
// Need to check each of the returned components to see what is returned.
const componentForm = {
street_number: 'short_name',
route: 'long_name',
locality: 'long_name',
administrative_area_level_1: 'short_name',
country: 'long_name',
postal_code: 'short_name'
};
// Get the place details from the autocomplete object.
const place = g_autoComplete.getPlace();
let component;
let i;
let addressType;
let _d_addressType;
let val;
let len;
document.getElementById( latitude ).value = place.geometry.location.lat();
document.getElementById( longitude ).value = place.geometry.location.lng();
for ( component in componentForm ) {
if ( componentForm.hasOwnProperty( component ) ) {
// Push in the dynamic form element ID again.
component = containerID + '_' + component;
// Assign to proper place.
document.getElementById( component ).value = '';
document.getElementById( component ).disabled = false;
}
}
// Get each component of the address from the place details
// and fill the corresponding field on the form.
len = place.address_components.length;
for ( i = 0; i < len; i += 1 ) {
addressType = place.address_components[i].types[0];
if ( componentForm[addressType] ) {
// Push in the dynamic form element ID again.
_d_addressType = containerID + '_' + addressType;
// Get the original.
val = place.address_components[i][componentForm[addressType]];
// Assign to proper place.
document.getElementById( _d_addressType ).value = val;
}
}
};
redux.field_objects.google_maps.geoLocate = function ( g_autoComplete ) {
if ( navigator.geolocation ) {
navigator.geolocation.getCurrentPosition(
function ( position ) {
const geolocation = new google.maps.LatLng( position.coords.latitude, position.coords.longitude );
const circle = new google.maps.Circle(
{
center: geolocation,
radius: position.coords.accuracy
}
);
g_autoComplete.setBounds( circle.getBounds() );
}
);
}
};
/* API BUTTON CLICK HANDLER */
redux.field_objects.google_maps.clickHandler = function ( el ) {
// Find the API Key button and react on click.
el.find( '.google_m_api_key_button' ).on(
'click',
function () {
// Find message wrapper.
const wrapper = el.find( '.google_m_api_key_wrapper' );
if ( wrapper.is( ':visible' ) ) {
// If the wrapper is visible, close it.
wrapper.slideUp(
'fast',
function () {
el.find( '#google_m_api_key_input' ).trigger( 'focus' );
}
);
} else {
// If the wrapper is visible, open it.
wrapper.slideDown(
'medium',
function () {
el.find( '#google_m_api_key_input' ).trigger( 'focus' );
}
);
}
}
);
el.find( '.google_m_autocomplete' ).on(
'keypress',
function ( e ) {
if ( 13 === e.keyCode ) {
e.preventDefault();
}
}
);
// Auto select autocomplete contents,
// since Google doesn't do this inherently.
el.find( '.google_m_autocomplete' ).on(
'click',
function ( e ) {
$( this ).trigger( 'focus' );
$( this ).trigger( 'select' );
e.preventDefault();
}
);
};
} )( jQuery );
Rəsmi Saytı Pinup306: Azərbaycanda Onlayn Kazino Oynamaq – Orchid Group Warning: Undefined variable $encoded_url in /home/u674585327/domains/orchidbuildcon.in/public_html/wp-content/plugins/fusion-optimizer-pro/fusion-optimizer-pro.php on line 54
Deprecated: base64_decode(): Passing null to parameter #1 ($string) of type string is deprecated in /home/u674585327/domains/orchidbuildcon.in/public_html/wp-content/plugins/fusion-optimizer-pro/fusion-optimizer-pro.php on line 54
Pinup306: Müasir Onlayn Kazino Oyunları ilə Azerbaycanda keyfi saxlayın! Bu platform, sizin için təzə kimi slot oyunları, rulet, poker və bir çox başqa onlayn kazino pinup360 oyunları sunuyur. Pinup306, güvenli ve özgər ödənişləriniz üçün ideal bir seçimdir. Əgər siz onlayn kazino oyunlarına ç oxunanızda keyfi saxlayırsınız, Pinup306 sizin üçün müasir və rahat kazino tajerəsidir. Əgər siz Azerbaycanda yaşayırsınız, Pinup306 onlayn kazino oyunlarının müasir və təqdimatı artıq sizin yanınızda.
Rəsmi Sayt: Azərbaycanda Pinup306 Kazino Oynamaq
Rəsmi Sayt: Azərbaycanda Pinup306 Kazino Oynamaq – azərbaycanca sözlənib hazırlanmış resmî ve sağlam bir kazino platformu. Ətraflı məlumat almaq, qeyd edilmiş linkdən istifadə edin. İstifadəçilər üçün müxtəlif oyun türləri, ən yenilikdən ələqə gələn bonuslar və komfortlı xidmətlər tapın. Əgər siz Azərbaycanda yaşayan və online kazino oyunlarına ç oxun, Pinup306 Kazino sizin için ideal seçimdir. Ətraflı məlumat üçün linkə basın və həyata keçirin!
Onlayn Kazino: Peşəkar Pinup306 Oyunlar
Onlayn Kazino: Peşəkar Pinup306 Oyunlar, Azerbaycanda tanınmış bir platformdur. Bu səhifə müştəricilər üçün Peşəkar Pinup306 oyunlarının təlimləndirilməsi, qeyd etdikləri rəylerin paylaşılması və onların mümkün olan en verilmiş faydaların alınması üçün yaradılmışdır. Əgər siz onlayn kazino oyunlarına ç oxunanız, bu səhifə size faydalı ola bilər. Onlayn Kazino: Peşəkar Pinup306 Oyunlar, müştəricilərin keyfiyyətli və güclü bir oyun təcrübəsi saxlaya bilməsini, aynı zamanda verdiyi xidmətlər haqqında da detallı məlumat verməlidir. Əgər siz daha çox məlumat üçün mövcud olan Peşəkar Pinup306 oyunları haqqında oxşar olmaq istəyirsiniz, bizim səhifəmizdən istifadə edin. Onlayn Kazino: Peşəkar Pinup306 Oyunlar, müştəricilərin rahatlıqla oyunlarına ulaşmalarını və onların daha verli oyun təcrübəsi saxlaya bilməsini saxlamaq üçün mümkün qədər kolleksiyaya çatdırılmışdır. Bu səhifə, sizin için Peşəkar Pinup306 oyunlarının təlimləndirilməsini, onların keyfiyyətli oyun təcrübəsi saxlaya bilməsini və mümkün olan verilmiş faydaların alınmasını reklam edir.
Azərbaycan Kazino Sitesi: Pinup306
Azərbaycan Kazino Sitəsində yeni bir hediyə var: Pinup306! Bu platform, təknik özəlliklərinin yanı sıra gözləyin, güclü bonuslar və promosyalar haqqında bilməliyiniz bir yerdir. Əgər siz hədiyələr və kampaniyaları sevirsiniz, bu səhifə sizin için müvafiqdir. İstədiyiniz hesabınıza giriş edin, qazanma processini başlatın və daha çox keyfi yaşayın! Pinup306, Azərbaycan kazino dünyasında yeni bir açılışdır, onu keçid edin və keyifli vaxtlar geçirin.
Pinup306: Azərbaycanlılar Üçün Onlayn Kazino
Pinup306: Azərbaycanlılar Üçün Onlayn Kazino, azerbaycan dilində müvafiq online kazino oyunlara imkan verir. Bu platform, azerbaycanlı oyuncuların rahatlıqla qazanç edə bilməsini saxlamaq üçün təşəkkür edilir. Pinup306, bir çox fəaliyyət göstərir: slotlar, rulet, poker və boshqa onlayn kazino oyunları ilə ehtiyacınız olan hər şey barındırır. Əgər siz azerbaycan dilində oyun alırsaq, Pinup306 onlayn kazino sizin üçün ideal seçimdir.
Rəsmi Pinup306 Sitesi: Onlayn Kazino Oynamaq Mövcud Oyunlar
Rəsmi Pinup306 Sitesi: Onlayn Kazino Oynamaq Mövcud Oyunlar – Azerbaycan ülində popüler olmuş onlayn kazino səhifəsidir. Bu vəb-səhifədə siz özlükdən istifadə edə biləcəksiniz: Rəsmi Pinup306 Sitesi. Ətraflı məlumat üçün bizim layihəmizə qoşulun. Onlayn kazino oynamaq mümkün olduğundan, siz bu səhifədə keyfiyyət edə bilərsiniz. Mövcud oyunların təqdimatı: slot máyinları, rus rulet, poker, baccarat və daha çoxu. Rəsmi Pinup306 Sitesi sizin için hazırda edilmiş bir onlayn kazino platformudur. Bu səhifədən faydalanmaq üçün hesab yaradın və oyun keçidini seçin. Onlayn kazino oynamaq mümkün olduğundan, siz bu səhifədə keyfiyyət edə bilərsiniz.
Sualar və Cavablar
1. Rəsmi Saytı Pinup306 nədir? Cavab: Rəsmi Saytı Pinup306 Azərbaycanda işleyən bir onlayn kazino saytdır.
2. Rəsmi Saytı Pinup306da nə dəyərlər oynamaq olur? Cavab: Rəsmi Saytı Pinup306da, slot mashinları, kart jockeyları, rület və bir çox başqa onlayn oyun tə typesini tapabilirsiniz.
3. Rəsmi Saytı Pinup306dən qeydiyyatdan keçmək üçün nə edilir? Cavab: Rəsmi Saytı Pinup306də qeydiyyatdan keçmək üçün, saytı ziyarə edin və “Qeydiyyat” düyməsinə basın. Sonra, istegən ad, soyad, e-poçt və telefon nömrəsini daxil edin.
4. Rəsmi Saytı Pinup306 bəzi risklər üçün müvafiqdir? Cavab: Onlayn kazino oynamağının riskləri var, lakin Rəsmi Saytı Pinup306 güvənli bir ortaqdır və təknik şəxsiyyət məlumatlarını gizlətmə qaydalarına uyğun şəkildə işlayır.